<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div id="app"></div>
<script src="../React-js/react.development.js"></script>
<!--引入reac-dom 用于支持react操作dom-->
<script src="../React-js/react-dom.development.js"></script>
<!--引入babel 用于讲jsx语法转js语法-->
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
    class ShenMing extends React.Component {

        constructor(props) {
            super(props)
            console.log('ShenMing','constructor-构造器')
        }
        /**
         * 组件挂载完毕回调
         */
        componentDidMount() {
            //一般做初始化的事情 例如：开启定时器 订阅事件
            console.log('ShenMing','componentDidMount-组件挂载完毕回调')
        }
        componentWillUnmount() {
            //一般做收尾的事情 例如：清理定时器 取消订阅
            console.log('ShenMing','componentWillUnmount-组件将要卸载')
        }


        //开始挂载组件
        componentWillMount() {
            console.log('ShenMing','componentWillMount-开始挂载组件')
        }


        /**
         * 组件将要卸载的回调
         */

        //组件跟新完毕
        componentDidUpdate() {
            console.log( 'ShenMing','componentDidUpdate-更新完毕')
        }
        componentWillUpdate() {
            console.log('ShenMing','componentWillUpdate-组件将要更新')
        }
        shouldComponentUpdate(nextProps, nextState) {
            console.log('ShenMing','shouldComponentUpdate-组件是否需要更新')
            return true
        }
        componentWillReceiveProps(nextProps) {
            console.log('ShenMing','componentWillReceiveProps-组件将要接受新的属性')
        }
        state = {
            num: 1
        }
        sta

        render() {
            console.log('3|6','render-渲染模版')
            return <div>
                <div style={{opacity: this.state.opacity}}>
                    <h3>我是父组件 数字是：{this.state.num}</h3>
                    <ShowNum num={this.state.num}/>
                </div>
                <button onClick={this.add}>加一</button>
            </div>
        }

        //添加数字
        add = () => {
            this.setState({
                num: this.state.num + 1
            })
        }
    }

    class ShowNum extends React.Component {
        constructor(props) {
            super(props)
            console.log('ShowNum','constructor-构造器')
        }
        //开始挂载组件
        componentWillMount() {
            //..。
            console.log('ShowNum','componentWillMount-开始挂载组件')
        }

        /**
         * 组件挂载完毕回调
         */
        componentDidMount() {
            //一般这里做初始化的事情
            console.log('ShowNum','componentDidMount-组件挂载完毕回调')
        }
        /**
         * 组件将要卸载的回调
         */
        componentWillUnmount() {
            console.log('ShowNum','componentWillUnmount-组件将要卸载')
        }
        //组件跟新完毕
        componentDidUpdate() {
            console.log('ShowNum', 'componentDidUpdate-更新完毕')
        }
        componentWillUpdate() {
            console.log('ShowNum','componentWillUpdate-组件将要更新')
        }
        shouldComponentUpdate(nextProps, nextState) {
            console.log('ShowNum','shouldComponentUpdate-组件是否需要更新')
            return true
        }
        componentWillReceiveProps(nextProps) {
            //只有更新props才会执行，所以可以理解首次不会调用
            console.log('ShowNum','componentWillReceiveProps-组件将要接受新的属性')
        }

        render() {
            return <h3>我是子组件，数字是：{this.props.num}</h3>
        }
    }

    ReactDOM.render(<ShenMing/>, document.getElementById('app'))
</script>
</body>
</html>
